package cn.tedu.spring.life;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

@Component
@Scope("prototype")
public class TestService {

    public TestService(){
        System.out.println("TestService的构造方法被调用了");
    }

    private final CopyOnWriteArrayList<String> copyOnWriteArrayList=
            new CopyOnWriteArrayList();

    /**
     * 标注在方法上，在对象实例化后，Bean初始化过程调用用户自定义的方法
     *  要求方法无参且返回值为void
     *  可以用于初始化缓存、初始化数据库连接
     */
    @PostConstruct
    public void initList(){
        copyOnWriteArrayList.add("Tom");
        copyOnWriteArrayList.add("Jack");
        copyOnWriteArrayList.add("Rose");
        System.out.println("bean对象创建完成并执行了PostConstruct所修饰的方法");
    }

    public List<String> getList(){
        return copyOnWriteArrayList;
    }

    /**
     * 在销毁Bean时、执行用户自定义的方法
     * 标注在方法上，要求方法无参且返回值为void
     * 清空缓存、释放资源
     * 关闭容器时会自动调用
     */
    @PreDestroy
    public void destroy(){
        copyOnWriteArrayList.clear();
        System.out.println("copyOnWriteArrayList 集合已销毁");
    }
}
